home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / mint / mint110s / quickmov.spp < prev    next >
Text File  |  1993-08-16  |  2KB  |  63 lines

  1. ; Copyright 1992 Eric R. Smith
  2. ; Copyright 1993 Atari Corporation
  3. ; All rights reserved.
  4. ;
  5. ; quickmove(char *dst, char *src, long nbytes):
  6. ; quickly copy "nbytes" bytes from src to dst. Assumes that both
  7. ; src and dst are word aligned.
  8. ;
  9.     TEXT
  10.  
  11.     XDEF    _quickmove
  12.  
  13. _quickmove:
  14.     move.l    4(sp),a0        ; get dst
  15.     move.l    8(sp),a1        ; get src
  16.     move.l    12(sp),d0        ; get nbytes
  17.     lsr.l    #8,d0            ; 
  18.     lsr.l    #1,d0            ; d0 = nbytes / 512
  19.     subq.l    #1,d0            ; prepare for dbra loop
  20.     bmi.s    Leftover        ; if < 0, skip
  21.     movem.l    d1-d7/a2-a6,-(sp)    ; save regs
  22. L1:
  23.     movem.l    (a1)+,d1-d7/a2-a6    ; read 12*4 = 48 bytes
  24.     movem.l    d1-d7/a2-a6,(a0)    ;
  25.     movem.l    (a1)+,d1-d7/a2-a6    ; 2nd read
  26.     movem.l    d1-d7/a2-a6,48(a0)    ;
  27.     movem.l    (a1)+,d1-d7/a2-a6    ; 3rd read
  28.     movem.l    d1-d7/a2-a6,96(a0)    ;
  29.     movem.l    (a1)+,d1-d7/a2-a6    ; 4th read
  30.     movem.l    d1-d7/a2-a6,144(a0)    ;
  31.     movem.l    (a1)+,d1-d7/a2-a6    ; 5th
  32.     movem.l    d1-d7/a2-a6,192(a0)    ;
  33.     movem.l    (a1)+,d1-d7/a2-a6    ; 6th
  34.     movem.l    d1-d7/a2-a6,240(a0)    ;
  35.     movem.l    (a1)+,d1-d7/a2-a6    ; 7th
  36.     movem.l    d1-d7/a2-a6,288(a0)    ;
  37.     movem.l    (a1)+,d1-d7/a2-a6    ; 8th
  38.     movem.l    d1-d7/a2-a6,336(a0)    ;
  39.     movem.l    (a1)+,d1-d7/a2-a6    ; 9th
  40.     movem.l    d1-d7/a2-a6,384(a0)    ;
  41.     movem.l    (a1)+,d1-d7/a2-a6    ; 10th
  42.     movem.l    d1-d7/a2-a6,432(a0)    ; At this point, 480 bytes done
  43.     movem.l    (a1)+,d1-d7/a2        ; Only do 32 more bytes
  44.     movem.l    d1-d7/a2,480(a0)    ; for a total of 512
  45.  
  46.     lea    512(a0),a0
  47.     subq.l    #1,d0
  48.     bge.s    L1
  49.  
  50.     movem.l    (sp)+,d1-d7/a2-a6    ; pop registers
  51.  
  52. Leftover:                ; do the remaining bytes
  53.     move.l    12(sp),d1
  54.     and.w    #$01ff,d1        ; d1 = nbytes % 512
  55.     subq.w    #1,d1            ; prepare for dbra loop
  56.     bmi.s    Ldone
  57. L2:
  58.     move.b    (a1)+,(a0)+
  59.     dbra    d1,L2
  60. Ldone:
  61.     rts                ; return
  62.     END
  63.